import CryptoJS from 'crypto-js';
/**
 * 安全的AES解密工具（CBC模式）
 */
const AesDecryptor = {
    /**
     * 解密主函数
     * @param {Object} params - 解密参数
     * @param {string} params.token - 加密token
     * @param {string} params.key - 密钥
     * @param {string} params.iv - 初始向量
     * @param {string} [params.keyEncoding='Utf8'] - 密钥编码
     * @param {string} [params.ivEncoding='Utf8'] - IV编码
     * @returns {string|null} 解密结果，失败返回null
     */
    decrypt: function({ token, key, iv, keyEncoding = 'Utf8', ivEncoding = 'Utf8' }) {
      try {
        // 验证参数
        if (!token || !key || !iv) {
          throw new Error("缺少必要参数（token/key/iv）");
        }
  
        // 转换密钥和IV
        const keyParser = CryptoJS.enc[keyEncoding];
        const ivParser = CryptoJS.enc[ivEncoding];
        if (!keyParser || !ivParser) {
          throw new Error("不支持的编码方式");
        }
  
        const keyWordArray = keyParser.parse(key);
        const ivWordArray = ivParser.parse(iv);
  
        // 解密
        const decrypted = CryptoJS.AES.decrypt(token, keyWordArray, {
          iv: ivWordArray,
          mode: CryptoJS.mode.CBC,
          padding: CryptoJS.pad.Pkcs7
        });
  
        const result = decrypted.toString(CryptoJS.enc.Utf8);
        if (!result) throw new Error("解密失败，结果为空");
        return result;
      } catch (error) {
        console.error("AES解密失败：", error.message);
        return null;
      }
    }
  };
  

  export default AesDecryptor;